/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package beans;

import java.io.Serializable;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author Paulo de Tarso e Jefferson Ricardo
 */
public class Usuario implements Serializable{

    /**
     * Login do usuário.
     */
    private String login;
    /**
     * Senha do usuário.
     */
    private String senha;
    /**
     * Nome do usuário.
     */
    private String nome;
    /**
     * Descrição do usuário.
     */
    private String descricao;
    /**
     * Estado Civil do usuário.
     */
    private String estadoCivil;
    /**
     * Aniversário do usuário.
     */
    private Date aniversario;
    /**
     * Cidade Natal do usuário.
     */
    private String cidadeNatal;
    /**
     * Lista de amigos do usuário.
     */
    private List<Usuario> amigos = new LinkedList<Usuario>();
    /**
     * Lista de usuários pendentes a adição de amizade.
     */
    private List<Usuario> pendentes = new LinkedList<Usuario>();
    /**
     * Lista de eventos criados pelo usuário.
     */
    private List<Evento> eventosUsuarioEhDono = new LinkedList<Evento>();
    /**
     * Lista de eventos que o usuário participa.
     */
    private List<Evento> eventosUsuarioParticipa = new LinkedList<Evento>();

    /**
     * Construtor da Classe Usuario.
     * @param login Login do usuário.
     * @param senha Senha do usuário.
     * @param nome Nome do usuário.
     */
    public Usuario(String login, String senha, String nome){
        this.login = login;
        this.senha = senha;
        this.nome = nome;
    }

    /**
     * @return O Login do usuário.
     */
    public String getLogin() {
        return login;
    }

    /**
     * @return A Senha do usuário.
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @return O nome do usuário.
     */
    public String getNome() {
        return nome;
    }

    /**
     * @return A descrição do usuário.
     */
    public String getDescricao() {
        return descricao;
    }

    /**
     * @param descricao A Descrição do usuário para atribuição de valor.
     */
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    /**
     * @return O estado civil do usuário.
     */
    public String getEstadoCivil() {
        return estadoCivil;
    }

    /**
     * @param estadoCivil O estado civil do usuário para atribuição de valor.
     */
    public void setEstadoCivil(String estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    /**
     * @return O aniversário do usuário.
     */
    public Date getAniversario() {
        return aniversario;
    }

    /**
     * @param aniversario O aniversário do usuário para atribuição de valor.
     */
    public void setAniversario(Date aniversario) {
        this.aniversario = aniversario;
    }

    /**
     * @return A cidade natal do usuário.
     */
    public String getCidadeNatal() {
        return cidadeNatal;
    }

    /**
     * @param cidadeNatal A cidade natal do usuário para atribuição de valor.
     */
    public void setCidadeNatal(String cidadeNatal) {
        this.cidadeNatal = cidadeNatal;
    }

    /**
     * @return A Lista de amigos do usuário.
     */
    public List<Usuario> getAmigos() {
        return amigos;
    }

    /**
     * @return A Lista de usuários pendentes a adição de amizade do usuário.
     */
    public List<Usuario> getPendentes() {
        return pendentes;
    }


    /**
     * @return A Lista de eventos criados pelo usuário.
     */
    public List<Evento> getEventosUsuarioEhDono() {
        return eventosUsuarioEhDono;
    }


    /**
     * @return A Lista de eventos que o usuário participa.
     */
    public List<Evento> getEventosUsuarioParticipa() {
        return eventosUsuarioParticipa;
    }

    /**
     * Método equals da classe Usuario.
     */
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Usuario other = (Usuario) obj;
        if ((this.login == null) ? (other.login != null) : !this.login.equals(other.login)) {
            return false;
        }
        return true;
    }

    /**
     * Método hashCode da classe Usuario.
     */
    @Override
    public int hashCode() {
        int hash = 3;
        hash = 11 * hash + (this.login != null ? this.login.hashCode() : 0);
        return hash;
    }

}
